// 2023.10.31 15:50 星期二 晴

let TargetArr = [1, 2, 3, 4, 5, 6, 7, 8, 9];

let CLongArr = [4];

let recu = 0;

console.log('132');

function recuClongArr() {
  let hasFront = false;

  for (let i = 0; i < CLongArr.length; i++) {
    let DeepI = getFrontMidIndex(i);
    if ([false].indexOf(DeepI) == -1) {
      hasFront += true;
      CLongArr.splice(i++, 0, TargetArr[DeepI]);
    }
  }
  console.log(recu, CLongArr);

  if (hasFront) {
    recu++;

    if (CLongArr.length * 2 > TargetArr.length) {
      console.log('fillComp', CLongArr.length, recu, CLongArr);
      fillLastComp();
    } else {
      recuClongArr();
    }
  }
  if (!hasFront) {
    console.log('fillComp', CLongArr.length, recu, CLongArr);
    fillLastComp();
  }
}

/**
 * 获取 cLongArr 当前 值 和 前一个值 的 目标数组的中间位置
 * 如果已存在 则返回下一个值
 * 如果 下一个值 是 当前值 返回 false
 * @param {Number} currentI cLongArr 的 某一个索引
 * @returns
 */
function getFrontMidIndex(currentI) {
  let Sind =
    TargetArr.indexOf(CLongArr[currentI - 1]) > -1
      ? TargetArr.indexOf(CLongArr[currentI - 1])
      : 0;
  let Cind =
    TargetArr.indexOf(CLongArr[currentI]) > -1
      ? TargetArr.indexOf(CLongArr[currentI])
      : 0;

  let midI = Math.floor((Sind + Cind) / 2);

  if (CLongArr.indexOf(TargetArr[midI]) > -1) {
    midI++;
    if (CLongArr.indexOf(TargetArr[midI]) > -1) {
      return false;
    }
  }

  return midI;
}

/**
 * 填充 剩余 comp 组件
 */
function fillLastComp() {
  for (let i = 0; i < TargetArr.length; i++) {
    if (CLongArr.indexOf(TargetArr[i]) == -1) {
      CLongArr.splice(i, 0, TargetArr[i]);
    }
  }
}

recuClongArr();
